Listin Gambas2
Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas
Origine : http://listingambas.blogspot.com/2011/06/modulo-importar-y-exportar-desde-el.htmlModule Importer et exporter - presse-papiers
Pour être plus utiles, réemployer des
données provenant d'autres programmes ou utiliser les notres dans
d'autres programmes, est l'une des choses que tous nos programmes
doivent savoir faire. Pouvez-vous imaginer que vous ayez dans Listin un
grand nombre de données, mais que vous ne puissiez pas les utiliser
pour, par exemple, vous servir de l'adresse de chacun? Est-ce
qu'il nous faudra tout ré-écrire?
Eh bien dans ce module, nous allons utiliser la méthode la plus simple
qui existe pour transmettre des données d'un programme à l'autre: le
presse-papiers.
Export: Clipboard.Copy
Dans un premier temps nous créons le module exporter, il va ensuite falloir ajouter le code nécessaire pour transférer les informations de gridviewDonnees vers le presse-papiers.
Dans notre Fmain, nous créons un menu,
nous choisissons Exporter, et définissons le code suivant dans Fmain :
PUBLIC SUB Exp_Click ()
Exporter. copierpressepapier(grid VoirDonnees)
END
![]() Note: Lors de la création dans l'éditeur de menu, on a defini ainsi Exporter Importer / Exporter |
![]()
|
PUBLIC SUB CopiePressepapier(grille AS GridView)
DIM texte AS String
DIM a AS Integer
DIM b AS Integer
IF grille. header = 1 OR grille. header = 3 THEN
FOR a = 0 TO grille. Columns.count - 1
Texte & = grille. Columns [a]. Titre & "\ t"
NEXT
Texte & = "\ n"
ENDIF
FOR a = 0 TO grille. Rows . COUNT - 1
FOR b = 0 TO grille. Columns . COUNT - 1
Texte & = verif(grille[a, b].text) & "\ t"
NEXT ' b
Texte & = "\ n"
NEXT ' a
Clipboard.Copy(texte)
END
-------------------------------------------------- ------------------
PUBLIC SUB verif (Chaine AS String ) AS String
DIM a AS Integer
DIM lettre AS String
DIM retour AS String
DIM test AS Integer
'on vérifie qu'il n'y a pas de chiffre
FOR a = 1 TO Len (Chaine)
lettre = Mid $ (Chaine, a, 1 )
test = InStr ( "0123456789." , lettre)
IF test = 0 THEN
RETURN Chaine
' Ne contient que des lettres
ENDIF
NEXT
FOR a = 1 TO Len ( Chaine)
lettre = Mid $ ( Chaine, a, 1 )
IF points = "". THEN
lettre = ""
ENDIF
retour = & lettre
NEXT
RETURN retour
FIN
Comme on le voit, il est divisée en deux sous-programmes :
"CopiePressepapier " passe la grille que nous voulons copier (grille AS GridView ) au premier sous-programme. On lit les valeurs des titres de colonnes et des différentes lignes, en les ajoutant dans une variable appelée texte, puis avec la commande Clipboard.Copy(texte) on la passe au presse-papier.
Le deuxième sous-programme, " vérif " convertit le point décimal en virgule, de sorte que, par exemple ,une feuille de calcul lise correctement les nombres.
Après avoir cliqué sur le menu " Exporter ", le contenu actuel de gridviewDonnees (ou, s'il est filtré, seulement ce qui est extrait) est dans le presse-papier, nous pouvons le coller (dans OpenOffice Calc par exemple) :
Ouvrons OpenOffice Calc, cliquons sur le menu "Edition / Coller", nous obtenons cet écran:

Nous cliquons sur "Accepter" et on obtient :

Import
:
Clipboard.Paste
Nous allons, par exemple, faire qu'à partir d'un tableur nous puissions transférer les données dans notre Listin.
Dans le formulaire Fmain, cliquons sur le menu Import / Export / Import et écrivons le code suivant:
PUBLIC SUB Imp_Click ()
FOpenOfficeCalcGambas2. Show ()
END
Nous allons créer un nouveau formulaire : FopenOfficeCalcGambas2
et exécuter le code suivant chaque fois que nous l'ouvrons :
PUBLIC SUB Form_Open ()
GridViewLecture. Rows . COUNT = 1001
GridViewLecture. Columns . COUNT = 20
END

Le CheckBoxTitres, quand il est coché, signifie que le contenu du
presse-papiers contient dans sa première ligne les titres (en-têtes des
colonnes) ou uniquement les données. Nous allons lire cette
propriété lorsque nous en aurons besoin.
( CheckBoxTitres.value
)
Le bouton "Cliquer pour voir le presse papier" exécute le code de
lecture du presse-papiers
Le bouton "Ajouter des données" est responsable de la transmission du
gridviewlecture vers la mémoire.
Le bouton "Annuler" permet d'annuler l'ensemble du processus.
Son code est des plus simples :
Me.Close ()
END
Et ouis, nous allons séparer :
DIM titres AS booléenne
IF CheckBoxTitres. value = - 1 THEN
FOpenOfficeCalcGambas2. GridViewLecture . Header = 1
Titres = - 1
ELSE
FOpenOfficeCalcGambas2. GridViewLecture . Header = 0
Titres = 0
ENDIF
GridViewLecture. Rows . COUNT = 0
GridViewLecture. Columns . COUNT = 0
GridViewLecture. Rows . COUNT = 1001
GridViewLecture. Columns . COUNT = 20
lire (FOpenOfficeCalcGambas2. GridViewLecture , titres)
END
et
le
sous-programme suivant :
PUBLIC SUB lecture (grille AS gridview, titres AS booléenne )
'grille: c'est la gridview où on va écrire les données
'titres: 0: pas de titres, -1 le titre contient la première fiche
DIM lignes AS String[]
DIM ligne_en_cours AS String
DIM colonnes AS String[]
DIM a AS Integer
DIM c AS Integer
DIM chaine AS String
DIM pressepapier AS String
DIM finligne AS String
DIM fincolonne AS String
finligne = "\ n" ' retour charriot (sépare les fiches)
fincolonne = "\ t" '' tabulation (seépare les colonnes)
presse-papiers = Clipboard.paste ()
lignes = Split (presse-papiers, finligne)
FOR a = 0 TO lignes. COUNT - 1
ligne_en_cours = lignes [a]
colonnes = Split (ligne_en_cours, fincolonne)
FOR c = 0 TO . colonnes COUNT - 1
IF a = 0 AND titres = - 1 THEN
grille. Columns [c]. title = colonnes [c]
AUTRE
IF titres = 0 THEN grille [a, c]. text = colonnes [c]
IF titres = - 1 THEN grille [a - 1 ., c] text = colonnes [c]
ENDIF
NEXT ' c
NEXT ' a
END
A titre de commentaire, la commande la plus importante est presse-papiers = Clipboard.Paste ()
et l'ordre split () va séparer les lignes distinctes du texte par le retour chariot "\ n" , et les données par des tabulations "\ t"
Code
pour
"Ajouter des données à Listin"
PUBLIC SUB ButtonAjouter_Click ()
DIM a AS Integer
DIM répète AS Integer
SI CheckBoxTitres. Value = TRUE THEN
«La première ligne contient les titres
a = 1
ENDIF
FOR repete = a TO 1001
IF verif (repete) <> 1 THEN
var id . add ( "Id" & Str $ ( NOW ) & Str $ (repete))
var. dni . add ((GridViewLecture [repete, 3 ]. text )
var. nom . add ((GridViewLecture [repete, 1 ]. text)
var. prenoms . add ((GridViewLecture [repete, 2 ]. text)
var. entreprise . add ((GridViewLecture [repete, 4 ]. text)
var. poste . add ((GridViewLecture [repete, 5 ]. text)
var. tel_entreprise . add ((GridViewLecture [repete, 6 ]. text)
var. tel_perso . add ((GridViewLecture [repete, 8 ]. text)
var. Fax . add ((GridViewLecture [repete ,10 ]. text)
var. mobile_entreprise . add(GridViewLecture [repete, 7 ]. text)
var. mobile_perso . add(GridViewLecture [repete, 9 ]. text)
var. page . ajouter (GridViewLecture [repete, 12 ]. text)
var. photo . add( "icône: / 16/gambas" )
var. adresse . add(GridViewLecture [repete, 13 ]. text)
var. commentaires . add(GridViewLecture [repete, 14 ]. text)
var. date_donnees . add(GridViewLecture [repete, 15 ]. text)
var. mail . add(GridViewLecture [repete, 11 ]. text)
ELSE
GOTO finlecture
ENDIF
NEXT
finlecture:
titre. remplir ()
Message. info ("Données chargées")
ME . Close
END
'-------retourne 0 si la fiche ne contient pas de données (elles valent toutes “”) ------
PUBLIC FONCTION VerifSiVide (fila AS Integer ) AS Integer
DIM b AS Integer
FOR b = 0 TO 19 'autant de fois qu'il y a de colonnes, pour ne pas avoir d'enregistrement vide
IF GridViewLecture[fila, b].text <> "" THEN
RETURN 0
ENDIF
NEXT
RETURN 1
END
Commentaires :
1. La fonction VerifSiVide, fait que lorsque la ligne de gridviewlecture est complètement vide (sans texte dans l'une de ses colonnes) elle retourne 0, et la procédure principale ButtonAjouter_Click () , cesse d'ajouter des informations. Sinon elle retourne 1 pour continuer d'ajouter l'enregistrement .
( IF VerifSivide (repete) <> 1 THEN ....)
2. Nous ajoutons seulement l'icône de Gambas dans l'image de la donnée que nous lisons, var.Photo.add ("icône: / 16/gambas")
Ce devrait être un chemin, mais si ce n'est pas un chemin valide une erreur serait générée, elle ferait sortir du programme.
Je vous laisse comme exercice, si vous le voulez bien, l'amélioration de cette partie du code ....